// utils/request.ts
import { useUserStore } from '@/store/user'; // 仍需要 Pinia（比如清除 Token 后跳转）
import type { RequestOptions, ResponseData } from './types';

const BASE_URL = import.meta.env.VITE_BASE_URL || 'https://api.example.com';
/**
 * 核心请求函数（返回 Promise）
 */
export function request<T = any>(options : RequestOptions) : Promise<ResponseData<T>> {
	return new Promise((resolve, reject) => {
		// --------------------------
		// 关键修改：从 localStorage 取 Token（持久化）
		// --------------------------
		// 1. 安全读取 userinfo：未登录时默认为空对象字符串
		const userinfoStr = uni.getStorageSync('userinfo') || '{}';
		// 2. 解析为用户对象：即使 userinfoStr 无效，也不会报错（默认空对象）
		const userinfo = JSON.parse(userinfoStr);
		// 3. 获取 token 和 storeid：未登录时默认为空字符串
		const token = userinfo.token || '';
		const storeid = userinfo.store_id || '';
		const requestOptions = {
			url: BASE_URL + options.url,
			method: options.method || 'GET',
			header: {
				'Content-Type': 'application/json',
				...(options.header || {}),
				Token: token || '', // 用 localStorage 的 Token
				Storeid: storeid
			},
			data: options.data || {},
			success: (res : any) => {
				const response = res.data as ResponseData<T>;
				if (response.code === 1) {
					resolve(response);
				} else {
					reject(response);
				}
			},
			fail: (err : any) => {
				reject({
					code: -1,
					msg: `请求失败：${err.errMsg}`,
					result: null,
				});
			},
		};

		uni.request(requestOptions);
	});
}

/**
 * 响应拦截器（统一处理 401）
 */
export function setupResponseInterceptor() {
	uni.addInterceptor('request', {
		success(res : any) {
			const response = res.data as ResponseData;
			if (response.code === 401) {
				uni.showToast({ title: '请重新登录', icon: 'none' });
				uni.navigateTo({ url: '/pages/login/login' });
				// 可选：清除 Pinia + localStorage 的 Token（彻底退出）
				const userStore = useUserStore();
				userStore.logout(); // 清除 Pinia 状态
				uni.removeStorageSync('token'); // 清除 localStorage
			}
		},
	});
}

setupResponseInterceptor();